package com.tarena.test.luban.demo.dubbo.provider;

import com.tarena.demo.luban.all.main.rpc.CartApiImpl;
import com.tarena.demo.luban.cart.api.CartApi;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;

import java.util.HashMap;
import java.util.Map;

/**
 * 当前类运行一个dubbo进程
 * 启动一个dubboApplication dubbo应用
 * dubbo应用中携带了provider所有配置信息
 */
public class Provider {
    public static void main(String[] args) {
        //组织一个dubbo的启动对象
        DubboBootstrap boot = DubboBootstrap.getInstance();
        //配置各种信息 包括注册中心 配置底层各种协议 接口实现
        //1 配置一个dubbo应用名称
        boot.application("cart-provider");
        //2 新建一个注册中心配置类 nacos zookeeper redis等
        RegistryConfig registryConfig=
                new RegistryConfig("nacos://localhost:8848");
        /*Map<String,String> parameters=new HashMap<>();
        parameters.put("namespace","dev");
        registryConfig.setParameters(parameters);*/
        /*registryConfig.setProtocol("nacos");//提供注册中心类型
        registryConfig.setAddress("localhost:8848");*/
        boot.registry(registryConfig);
        //3 配置协议 监听端口
        ProtocolConfig protocolConfig=new ProtocolConfig("dubbo",20990);
        //dubbo 是dubbo框架自带的一套底层数据通信传输协议,20990就是监听的端口
        boot.protocol(protocolConfig);
        //4 提供当前dubbo应用外界可以调用进来的实现对象 new CartApiImpl()
        ServiceConfig<CartApi> serviceConfig01=new ServiceConfig<>();
        serviceConfig01.setInterface(CartApi.class);
        serviceConfig01.setRef(new CartApiImpl());
        boot.service(serviceConfig01);
        //调用boot方法启动dubbo应用
        boot.start().await();
    }
}
